home *** CD-ROM | disk | FTP | other *** search
- /* GNUPLOT - hpljii.trm */
- /*
- * Copyright (C) 1990
- *
- * Permission to use, copy, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation.
- *
- * Permission to modify the software is granted, but not the right to
- * distribute the modified code. Modifications are to be distributed
- * as patches to released version.
- *
- * This software is provided "as is" without express or implied warranty.
- *
- * This file is included by ../term.c.
- *
- * This terminal driver supports:
- * hpljii, hpdj
- *
- * AUTHORS
- * John Engels
- * Russell Lang
- * Maurice Castro
- *
- * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
- *
- */
-
- /* The following HP laserjet series II driver uses generic bit mapped graphics
- routines from bitmap.c to build up a bit map in memory. The driver
- interchanges colomns and lines in order to access entire lines
- easily and returns the lines to get bits in the right order :
- (x,y) -> (y,XMAX-1-x). */
- /* This interchange is done by calling b_makebitmap() with reversed
- xmax and ymax, and then setting b_rastermode to TRUE. b_setpixel()
- will then perform the interchange before each pixel is plotted */
- /* by John Engels JENGELS@BNANDP51.BITNET, inspired by the hpljet driver
- of Jyrki Yli-Nokari */
-
- #ifdef HPLJII
-
- /* We define 4 different print qualities : 300ppi, 150ppi, 100ppi and
- 75ppi. (Pixel size = 1, 2, 3, 4 dots) */
-
- #define HPLJII_DPP (hplj_dpp) /* dots per pixel */
- #define HPLJII_PPI (300/HPLJII_DPP) /* pixel per inch */
- /* make XMAX and YMAX a multiple of 8 */
- #define HPLJII_XMAX (8*(unsigned int)(xsize*1920/HPLJII_DPP/8.0+0.9))
- #define HPLJII_YMAX (8*(unsigned int)(ysize*1920/HPLJII_DPP/8.0+0.9))
-
- #define HPLJII_VCHAR (HPLJII_PPI/6) /* Courier font with 6 lines per inch */
- #define HPLJII_HCHAR (HPLJII_PPI/10) /* Courier font with 10 caracters
- per inch */
-
- /* default values for term_tbl */
- #define HPLJII_75PPI_XMAX (1920/4)
- #define HPLJII_75PPI_YMAX (1920/4)
- #define HPLJII_75PPI_HCHAR (1920/4/6)
- #define HPLJII_75PPI_VCHAR (1920/4/10)
- #define HPLJII_75PPI_VTIC 5
- #define HPLJII_75PPI_HTIC 5
-
-
- #define HPLJII_PUSH_CURSOR fprintf(outfile,"\033&f0S") /* Save current
- cursor position */
- #define HPLJII_POP_CURSOR fprintf(outfile,"\033&f1S") /* Restore
- cursor position */
- #define HPLJII_COURIER fprintf(outfile,"\033(0N\033(s0p10.0h12.0v0s0b3T\033&l6D")
- /* be sure to use courier font with 6lpi and 10cpi */
-
- static int hplj_dpp=4;
- /* bm_pattern not appropriate for 300ppi graphics */
- static unsigned int b_300ppi_pattern[] = {0xffff, 0x1111,
- 0xffff, 0x3333, 0x0f0f, 0x3f3f, 0x0fff, 0x00ff, 0x33ff};
-
- HPLJIIoptions()
- {
- char opt[4];
-
- #define HPDJERROR "expecting dots per inch size 75, 100, 150 or 300"
- if (!END_OF_COMMAND) {
- if (token[c_token].length>3)
- int_error(HPDJERROR,c_token);
-
- /* almost_equals() won't accept numbers - use strcmp() instead */
- capture(opt,c_token,c_token);
- if (!strcmp(opt,"75")) {
- hplj_dpp = 4;
- }
- else if (!strcmp(opt,"100")) {
- hplj_dpp = 3;
- }
- else if (!strcmp(opt,"150")) {
- hplj_dpp = 2;
- }
- else if (!strcmp(opt,"300")) {
- hplj_dpp = 1;
- } else {
- int_error(HPDJERROR,c_token);
- }
- c_token++;
- }
-
- term_tbl[term].xmax = HPLJII_XMAX;
- term_tbl[term].ymax = HPLJII_YMAX;
- switch(hplj_dpp) {
- case 1:
- strcpy(term_options,"300");
- term_tbl[term].v_tic = 15;
- term_tbl[term].h_tic = 15;
- break;
- case 2:
- strcpy(term_options,"150");
- term_tbl[term].v_tic = 8;
- term_tbl[term].h_tic = 8;
- break;
- case 3:
- strcpy(term_options,"100");
- term_tbl[term].v_tic = 6;
- term_tbl[term].h_tic = 6;
- break;
- case 4:
- strcpy(term_options,"75");
- term_tbl[term].v_tic = 5;
- term_tbl[term].h_tic = 5;
- break;
- }
- }
-
-
- HPLJIIinit()
- {
- #ifdef vms
- reopen_binary();
- #endif /* vms */
- #ifdef PC
- reopen_binary();
- #endif /* PC */
- }
-
-
- HPLJIIgraphics()
- {
- term_tbl[term].v_char = HPLJII_VCHAR;
- term_tbl[term].h_char = HPLJII_HCHAR;
- HPLJII_COURIER;
- HPLJII_PUSH_CURSOR;
- /* rotate plot -90 degrees by reversing XMAX and YMAX and by
- setting b_rastermode to TRUE */
- b_makebitmap(HPLJII_YMAX,HPLJII_XMAX,1);
- b_rastermode = TRUE;
- }
-
-
- /* HPLJIItext by rjl - no compression */
- HPLJIItext()
- {
- register int x,j,row;
-
- fprintf(outfile,"\033*t%dR", HPLJII_PPI);
- HPLJII_POP_CURSOR;
- fprintf(outfile, "\033*r1A");
-
- /* dump bitmap in raster mode */
- for (x = b_xsize-1; x >= 0; x--) {
- row = (b_ysize/8)-1;
- fprintf(outfile, "\033*b0m%dW", b_ysize/8);
- for (j = row; j >= 0; j--) {
- (void) fputc( (char)(*((*b_p)[j]+x)), outfile );
- }
- }
- fprintf(outfile, "\033*rB");
-
- b_freebitmap();
-
- #ifndef vms /* most vms spoolers add a formfeed character */
- fprintf(outfile,"\f");
- #endif /* not vms */
- }
-
-
-
- HPLJIIlinetype(linetype)
- int linetype;
- {
-
- if (hplj_dpp == 1) {
- if (linetype>=7)
- linetype %= 7;
- /* b_pattern not appropriate for 300ppi graphics */
- b_linemask = b_300ppi_pattern[linetype+2];
- b_maskcount=0;
- }
- else {
- b_setlinetype(linetype);
- }
- }
-
- #define HPLJIImove b_move
- #define HPLJIIvector b_vector
- #define HPLJIItext_angle b_text_angle
-
- HPLJIIput_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- switch (b_angle) {
- case 0:
- y -= HPLJII_VCHAR/5;
- HPLJII_POP_CURSOR;
- HPLJII_PUSH_CURSOR;
- /* (0,0) is the upper left point of the paper */
- fprintf(outfile, "\033*p%+dx%+dY", x*HPLJII_DPP
- , (HPLJII_YMAX-y-1)*HPLJII_DPP );
- fputs(str, outfile);
- /* for (; *str; ++str, x += HPLJII_HCHAR)
- HPLJIIputc (x, y, *str, b_angle);*/
- break;
- case 1:
- y += (HPLJII_HCHAR-2*HPLJII_VCHAR)/2;
- y += (HPLJII_VCHAR+HPLJII_HCHAR)*strlen(str)/2;
- for (; *str; ++str, y -= HPLJII_VCHAR)
- HPLJIIputc (x, y, *str, b_angle);
- break;
- }
- }
-
- HPLJIIputc(x,y,c,angle)
- unsigned int x,y;
- int angle;
- char c;
- {
- HPLJII_POP_CURSOR;
- HPLJII_PUSH_CURSOR;
- /* (0,0) is the upper left point of the paper */
- fprintf(outfile, "\033*p%+dx%+dY", x*HPLJII_DPP
- , (HPLJII_YMAX-y-1)*HPLJII_DPP );
- fputc(c, outfile);
- }
-
-
- HPLJIIreset()
- {
- #ifdef vms
- fflush_binary();
- #endif /* vms */
- }
-
-
- /* HP DeskJet routines */
- HPDJgraphics()
- {
- switch(hplj_dpp) {
- case 1:
- b_charsize(FNT13X25);
- term_tbl[term].v_char = FNT13X25_VCHAR;
- term_tbl[term].h_char = FNT13X25_HCHAR;
- break;
- case 2:
- b_charsize(FNT13X25);
- term_tbl[term].v_char = FNT13X25_VCHAR;
- term_tbl[term].h_char = FNT13X25_HCHAR;
- break;
- case 3:
- b_charsize(FNT9X17);
- term_tbl[term].v_char = FNT9X17_VCHAR;
- term_tbl[term].h_char = FNT9X17_HCHAR;
- break;
- case 4:
- b_charsize(FNT5X9);
- term_tbl[term].v_char = FNT5X9_VCHAR;
- term_tbl[term].h_char = FNT5X9_HCHAR;
- break;
- }
- /* rotate plot -90 degrees by reversing XMAX and YMAX and by
- setting b_rastermode to TRUE */
- b_makebitmap(HPLJII_YMAX,HPLJII_XMAX,1);
- b_rastermode = TRUE;
- }
-
-
- /* 0 compression raster bitmap dump. Compatible with HP DeskJet 500
- hopefully compatible with other HP Deskjet printers */
- HPDJtext()
- {
- register int x,j,row;
-
- fprintf(outfile,"\033*b0M");
- fprintf(outfile,"\033*t%dR", HPLJII_PPI);
- fprintf(outfile, "\033*r0A");
-
- /* dump bitmap in raster mode */
- for (x = b_xsize-1; x >= 0; x--) {
- row = (b_ysize/8)-1;
- fprintf(outfile, "\033*b%dW", b_ysize/8);
- for (j = row; j >= 0; j--) {
- (void) fputc( (char)(*((*b_p)[j]+x)), outfile );
- }
- }
- fprintf(outfile, "\033*rbC");
-
- b_freebitmap();
-
- #ifndef vms /* most vms spoolers add a formfeed character */
- fprintf(outfile,"\f");
- #endif /* not vms */
- }
-
- #define HPDJtext_angle b_text_angle
- #define HPDJput_text b_put_text
-
- #endif /* HPLJII */
-
-